package com.spzx.product.service.Impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.spzx.common.core.utils.StringUtils;
import com.spzx.product.domain.ProductUnit;
import com.spzx.product.mapper.ProductUnitMapper;
import com.spzx.product.service.ProductUnitService;
import jakarta.servlet.Servlet;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Service;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

@Service
public class ProductUnitServiceImpl extends ServiceImpl<ProductUnitMapper,ProductUnit> implements ProductUnitService {

    @Override
    public Page<ProductUnit> selectUnitPage(ProductUnit productUnit) {
        //1组装分页条件： 从请求参数中获取pageNum和pageSize
        //1.1 获取请求对象
        ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = requestAttributes.getRequest();
        //1.2 获取请求参数
        String pageNum = request.getParameter("pageNum");
        String pageSize = request.getParameter("pageSize");

        Page<ProductUnit> page = new Page<>(StringUtils.isEmpty(pageNum) ? 1 : Integer.parseInt(pageNum),
                StringUtils.isEmpty(pageSize) ? 1 : Integer.parseInt(pageSize));
        //2封装查询条件
        LambdaQueryWrapper<ProductUnit> lambdaQuery = Wrappers.lambdaQuery(ProductUnit.class);
        String name = productUnit.getName();
        if(!StringUtils.isEmpty(name)){
            lambdaQuery.like(ProductUnit::getName , name);
        }
        //3查询分页数据
        //参数1：用来携带分页条件 ， 参数2：用来携带查询条件
        this.page(page , lambdaQuery);

        return page;
    }

    @Override
    public boolean checkUnitNameUnique(ProductUnit productUnit) {
        //1、判断新增还是更新: 如果productUnit有id表示更新，没有id设置为-1L表示新增
        Long id = productUnit.getId()==null?-1L: productUnit.getId();
        //2、判断单位名称是否被占用
        //2.1 使用新增或更新的单位名称查询数据库中的数据
        ProductUnit selectProductUnit = this.getOne(Wrappers.lambdaQuery(ProductUnit.class)
                .eq(ProductUnit::getName, productUnit.getName())
                .last("limit 1"));
        //2.2 判断 如果查询到的对象不为空 表示存在同名的单位
        if(selectProductUnit != null && id.longValue() != selectProductUnit.getId().longValue()) {
            //  有同名的单位 ，        数据库同名的单位的id 不是自己的：(不能更新)
            return false;//表示新增或更新时重名了
        }
        //2.3 新增时名称不重复，id=-1  直接返回true
        return true;
    }
}
